#ifndef MATERIAL_H
#define MATERIAL_H

#include <jem/base/Object.h>
#include "import.h"
#include "Array.h"


//-----------------------------------------------------------------------
//   class Material
//-----------------------------------------------------------------------

// The Material class represents a material model. Its main task is to
// calculate the strain-stress stiffness matrix.

class Material : public Object
{
 public:

  virtual void            configure

    ( const Properties&     props );

  virtual void            getConfig

    ( const Properties&     conf )         const;

  virtual Matrix          getStiffMat   () const = 0;


 protected:

  virtual                ~Material      ();

};


//-----------------------------------------------------------------------
//   class IsoMaterial
//-----------------------------------------------------------------------

// The IsoMaterial class implements an isotropic, linear elastic
// material model.

class IsoMaterial : public Material
{
 public:

  explicit                IsoMaterial

    ( int                   rank );

  virtual void            configure

    ( const Properties&     props );

  virtual void            getConfig

    ( const Properties&     conf )         const;

  virtual Matrix          getStiffMat   () const;


 protected:

  virtual                ~IsoMaterial   ();


 private:

  int                     rank_;

  double                  young_;
  double                  poisson_;

};


#endif
